<template>
	<view class="container">
		<view class="wechatapp">
			<view class="header">
				<image class="image" src="@/static/default-avatar.png"></image>
			</view>
		</view>
		<view class="auth-title">申请获取以下权限</view>
		<view class="auth-subtitle">获得你的公开信息（昵称、头像等）</view>
		<view class="login-btn">
			<!-- 获取微信用户信息 -->
			<button @click.stop="getUserProfile">授权登录</button>
		</view>
		<view class="no-login-btn">
			<button @click="handleCancel">暂不登录</button>
		</view>
		
		<view class="form-license">
			<image @click="privacyChange" v-if="isCheck" src="@/static/radio@selected.png"></image>
			<image @click="privacyChange" v-else src="@/static/radio.png"></image>
			<text class="txt1">勾选代表同意</text>
			<text @click="handleShowLicense(1)" class="txt1">《隐私协议》</text>
			<text>和</text>
			<text @click="handleShowLicense(2)" class="txt1">《用户服务协议》</text>

		</view>
	</view>
</template>

<script>
	import { Auth } from '@/utils/model/auth-model.js';
	var auth = new Auth();
	
	export default {

		data() {
			return {
				// 微信小程序登录凭证 (code)
				// 提交到后端，用于换取openid
				code: '',
				isCheck: false
			}
		},

		methods: {
			privacyChange(){
				this.isCheck = !this.isCheck
			},
			handleShowLicense(id){
				uni.navigateTo({
					url: '/pages/agreement/index?id='+id
				})
			},
			// 获取code
			// https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
			getCode() {
				return new Promise((resolve, reject) => {
					uni.login({
						provider: 'weixin',
						success: res => {
							console.log('code', res.code)
							resolve(res.code)
						},
						fail: reject
					})
				})
			},

			// 获取微信用户信息(新版)
			getUserProfile() {
				const app = this
				
				// 验证是否阅读协议
				if (!app.isCheck) {
					uni.showModal({
					  title: '友情提示',
					  content: '请先阅读隐私协议和服务协议',
					  showCancel: false
					})
					return false
				}
				
				wx.canIUse('getUserProfile') && wx.getUserProfile({
					lang: 'zh_CN',
					desc: '获取用户相关信息',
					success({
						userInfo
					}) {
						console.log('用户同意了授权')
						console.log('userInfo：', userInfo)
						// 授权成功事件
						app.onAuthSuccess(userInfo)
					},
					fail() {
						console.log('用户拒绝了授权')
					}
				})
			},

			// 授权成功事件
			// 这里分为两个逻辑:
			// 1.将code和userInfo提交到后端，如果存在该用户 则实现自动登录，无需再填写手机号
			// 2.如果不存在该用户, 则显示注册页面, 需填写手机号
			// 3.如果后端报错了, 则显示错误信息
			async onAuthSuccess(userInfo) {
				uni.showLoading({
					title:'加载中'
				})
				const app = this
				const code = await app.getCode();
				const partyData = {
					code: code,
					oauth: 'MP-WEIXIN',
					userInfo
				}

				auth.loginMpWx(code, partyData).then(res => {
					console.log('------------------------------>')
					console.log(res)
					console.log('------------------------------>')
					// 保存tokne和userId到缓存
					uni.setStorageSync('userId', res.data.userId)
					uni.setStorageSync('Access-Token-UNI', res.data.token)
					
					// 一键登录成功
					uni.showToast({
						title: res.msg
					})
					
					// 相应全局事件订阅: 刷新上级页面数据
					uni.$emit('syncRefresh', true)
					// 跳转回原页面
					setTimeout(() => app.onNavigateBack(), 2000)

				}).catch(err => {
					const resultData = err.result.data
				    // 显示错误信息
				    if (isEmpty(resultData)) {
					  uni.showToast({
					  	title: err.result.message
					  })
				    }
				    // 跳转回原页面
				    if (resultData.isBack) {
				      setTimeout(() => app.onNavigateBack(1), 2000)
				    }
				    // 判断还需绑定手机号
				    //if (resultData.isBindMobile) {
				      //app.onEmitSuccess(userInfo)
				    //}
				}).finally(() => uni.hideLoading())
			},

			// 将oauth提交给父级
			// 这里要重新获取code, 因为上一次获取的code不能复用(会报错)
			async onEmitSuccess(userInfo) {
				const app = this
				app.$emit('success', {
					oauth: 'MP-WEIXIN', // 第三方登录类型: MP-WEIXIN
					code: await app.getCode(), // 微信登录的code, 用于换取openid
					userInfo // 微信用户信息
				})
			},

			/**
			 * 暂不登录
			 */
			handleCancel() {
				// 跳转回原页面
				this.onNavigateBack()
			},

			/**
			 * 登录成功-跳转回原页面
			 */
			onNavigateBack(delta = 1) {
				const pages = getCurrentPages()
				if (pages.length > 1) {
					uni.navigateBack({
						delta: Number(delta || 1)
					})
				} else {
					uni.switchTab({
						url: '/pages/index/index'
					})
					//this.$navTo('pages/index/index')
				}
			}

		}
	}
</script>

<style lang="scss" scoped>
	@import '~@/pages/login/index.scss';
</style>